#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindowClass; };
QT_END_NAMESPACE

class QSpinBox;
class QPixmap;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindowClass *ui;

private:
    /**
     * @brief 树中纵列编号枚举
    */
    enum tree_column_number
    {
        column_item_0 = 0,
        column_type_1 = 1,
        column_date_2 = 2
    };

    /**
     * @brief 类型枚举
    */
    enum tree_item_type
    {
        top_item = 1001,
        group_item = 1002,
        image_item = 1003
    };

private:
    QLabel* label_file_name = nullptr;//显示文件名
    QLabel* label_node_text = nullptr;//显示节点
    QSpinBox* spin_box = nullptr;//显示百分比
    QPixmap pixmap;//显示图片
    float ratio = 0;
    void display_image(QTreeWidgetItem* item);//显示图片

private:
    /**
     * @brief 遍历用的递归函数
     * @param item 
    */
    void change_item_caption(QTreeWidgetItem* item);

private slots://以下为对应信号的槽函数
    /**
     * @brief 添加目录被触发
    */
    void on_action_AddFolder_triggered();

    /**
     * @brief 添加文件被触发
    */
    void on_action_AddFiles_triggered();

    /**
     * @brief 删除节点被触发
    */
    void on_action_DeleteItem_triggered();

    /**
     * @brief 当前项目改变
     * @param current 
     * @param previous 
    */
    void on_treeWidget_currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);

    /**
     * @brief 遍历被触发
    */
    void on_action_ScanItems_triggered();

    /**
     * @brief 适合宽度触发
    */
    void on_action_FitWideBest_triggered();

    /**
     * @brief 适合高度触发
    */
    void on_action_FitHeightBest_triggered();

    /**
     * @brief 实际大小触发
    */
    void on_action_RealSize_triggered();

    /**
     * @brief 放大触发
    */
    void on_action_ZoomIn_triggered();

    /**
     * @brief 缩小触发
    */
    void on_action_ZoomOut_triggered();

    /**
     * @brief 设置可见
    */
    void on_action_Visible_triggered(bool checked);

    /**
     * @brief 设置悬浮
    */
    void on_action_Float_triggered(bool checked);

    /**
     * @brief 可见性变化
    */
    void on_dockWidget_visibilityChanged(bool visible);

    /**
     * @brief 顶级（停靠位置）改变
    */
    void on_dockWidget_topLevelChanged(bool topLevel);
};

